import { getBaseUrl } from '@/services/urlconst';
import * as umi from 'umi';
import { request } from 'umi';
import { getTenant } from './authority';
import { getSystemTypeValue } from './myutilTwo';
type UrlType = string;

const resetUrl = (url: UrlType) => {
  let requestUrl = `${url}?=${Math.random()}`;
  return requestUrl;
};

/**
 *  公共请求文件
 * @param methodType   请求类型
 * @param url          请求地址
 * @param bodyParams   请求body参数
 * @param heardParams  请求heard参数 默认为 {}
 * @param requestType  请求后数据类型 默认 'json'
 * @param charset      字符集  默认 'utf8'
 * @returns
 */
const requestFunCompon = (
  methodType: string,
  url: string,
  bodyParams?: any,
  heardParams: any = {},
  requestType: 'json' | 'form' = 'json',
  charset: 'utf8' | 'gbk' = 'utf8',
) => {
  return request(`${getBaseUrl()}${url}`, {
    method: methodType,
    toObj: false,
    headers: {
      tenantName: getTenant(),
      systemType: getSystemTypeValue(),
      ...heardParams,
    },
    data: {
      ...bodyParams,
    },
    requestType: requestType,
    charset: charset,
    skipErrorHandler: true,
  });
};

/**
 *  新请求接口封装, 主要是可以让开发人员改变接口请求URL  IP
 * @param methodType   请求类型
 * @param url          请求地址
 * @param bodyParams   请求body参数
 * @param heardParams  请求heard参数 默认为 {}
 * @param requestType  请求后数据类型 默认 'json'
 * @param charset      字符集  默认 'utf8'
 * @returns
 */
const requestFunComponFiex = (
  methodType: string,
  url: string,
  bodyParams?: any,
  heardParams: any = {},
  requestType: 'json' | 'form' = 'json',
  charset: 'utf8' | 'gbk' = 'utf8',
) => {
  return request(`${url}`, {
    method: methodType,
    toObj: false,
    headers: {
      tenantName: getTenant(),
      systemType: getSystemTypeValue(),
      ...heardParams,
    },
    data: Array.isArray(bodyParams)
      ? bodyParams
      : {
          ...bodyParams,
        },
    requestType: requestType,
    charset: charset,
    skipErrorHandler: true,
  });
};

/**
 *  下载文档流
 * @param methodType   请求类型
 * @param url          请求地址
 * @param bodyParams   请求body参数
 * @param heardParams  请求heard参数 默认为 {}
 * @param requestType  请求后数据类型 默认 'json'
 * @param charset      字符集  默认 'utf8'
 * @returns
 */
const requestFunHtml = (
  methodType: string,
  url: string,
  bodyParams?: any,
  heardParams: any = {},
  requestType: 'json' | 'form' = 'json',
  charset: 'utf8' | 'gbk' = 'utf8',
) => {
  return request(`${url}`, {
    method: methodType,
    toObj: false,
    headers: {
      tenantName: getTenant(),
      systemType: getSystemTypeValue(),
      ...heardParams,
    },
    data: {
      ...bodyParams,
    },
    responseType: 'blob',
    requestType: requestType,
    charset: charset,
    skipErrorHandler: true,
  });
};

/**
 *  上传文件
 * @param methodType   请求类型
 * @param url          请求地址
 * @param data         formdata参数
 * @param requestType  请求后数据类型 默认 'form'
 * @returns
 */
const requestFunUpload = (methodType: string, url: string, data: any, requestType?: 'form') => {
  return request(`${url}`, {
    method: methodType,
    headers: {
      tenantName: getTenant(),
      systemType: getSystemTypeValue(),
    },
    data,
    requestType: requestType,
    skipErrorHandler: true,
  });
};

export { resetUrl, requestFunCompon, requestFunComponFiex, requestFunHtml, requestFunUpload };
